package com.lg;

import com.lg.threadpool.ThreadPool;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

/**
 * 自定义 线程池
 *
 * @author by Mr. Li 2020/5/8 0:24
 */
@Slf4j(topic = "c.com.lg.TestPool")
public class TestPool {
    public static void main(String[] args) {
        ThreadPool threadPool = new ThreadPool(10,
                2, 1000, TimeUnit.MILLISECONDS, (queue, task) -> {
            // 1. 死等
            //queue.put(task);
            // 2) 带超时等待
            //queue.offer(task, TimeUnit.MILLISECONDS, 1500);
            // 3) 让调用者放弃任务执行
//            log.debug("放弃{}", task);
            // 4) 让调用者抛出异常
            throw new RuntimeException("任务执行失败 " + task);
            // 5) 让调用者自己执行任务
            //task.run();
        });

        for (int i = 0; i < 17; i++) { // 15 - 2 - 10 = 3
            int j = i;
            threadPool.execute(() -> {
                try {
                    Thread.sleep(1000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("{}", j);
            });
        }
    }
}

